package com.zzy.demo.collections;

import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;

import org.junit.Test;

import com.zzy.utils.RedisUtil;

import redis.clients.jedis.Jedis;

public class JedisDemo {

	@Test
	public void testDeom() {

		Jedis jedis = RedisUtil.getJedis();
		// 向key-->name中放入了value-->minxr
		jedis.set("name", "minxr");
		String ss = jedis.get("name");
		System.out.println(ss);

		// 很直观，类似map 将jintao append到已经有的value之后
		jedis.append("name", "jintao");
		ss = jedis.get("name");
		System.out.println(ss);

		// 2、直接覆盖原来的数据
		jedis.set("name", "jintao");
		System.out.println(jedis.get("name"));

		// 删除key对应的记录
		jedis.del("name");
		System.out.println(jedis.get("name"));// 执行结果：null

		
		
		/**
		 * 连续设置多个 key val
		 * mset相当于 jedis.set("name","minxr"); jedis.set("jarorwar","aaa");
		 */
		jedis.mset("name", "minxr", "jarorwar", "aaa");
		System.out.println(jedis.mget("name", "jarorwar"));

		
		
		// 过期时间时间
		jedis.setex("foo", 1, "foo not exits");   //第二个参数 有效时间 单位秒
		System.out.println(jedis.get("foo"));
		try {
			Thread.sleep(3000);
			System.out.println(jedis.get("foo"));
		} catch (InterruptedException e) {
		}
		

	}

	/**
	 * jedis操作        HashMap
	 */
	@Test 
	public void testMap() {
		Jedis jedis = RedisUtil.getJedis();
		Map<String, String> user = new HashMap<String, String>();
		user.put("name", "minxr");
		user.put("pwd", "password");
		
		
		//jedis.hset("user", "name","guo");
		
		jedis.hmset("user", user);
		// 取出user中的name，执行结果:[minxr]-->注意结果是一个泛型的List
		// 第一个参数是存入redis中map对象的key，后面跟的是放入map中的对象的key，后面的key可以跟多个，是可变参数
		List<String> rsmap = jedis.hmget("user", "name");
		System.out.println(rsmap);
		// 删除map中的某个键值
		// jedis.hdel("user","pwd");
		System.out.println(jedis.hmget("user", "pwd")); // 因为删除了，所以返回的是null
		System.out.println(jedis.hlen("user")); // 返回key为user的键中存放的值的个数1
		System.out.println(jedis.exists("user"));// 是否存在key为user的记录 返回true
		System.out.println(jedis.hkeys("user"));// 返回map对象中的所有key [pwd, name]
		System.out.println(jedis.hvals("user"));// 返回map对象中的所有value [minxr,
												// password]
		Iterator<String> iter = jedis.hkeys("user").iterator();
		while (iter.hasNext()) {
			String key = iter.next();
			System.out.println(key + ":" + jedis.hmget("user", key));
		}
	}

	/**
	 * jedis操作List
	 */
	@Test
	public void testList() {
		Jedis jedis = RedisUtil.getJedis();
		// System.out.println(jedis.flushDB());
		// 添加数据
		jedis.lpush("lists", "vector");
		jedis.lpush("lists", "ArrayList");
		jedis.lpush("lists", "LinkedList");
		
		
		// 数组长度
		System.out.println("数组长度 " + jedis.llen("lists"));
		// 字串 从0开始  取3个
		System.out.println("打印数组..." + jedis.lrange("lists", 0, 3));

		// 修改列表中单个值
		jedis.lset("lists", 0, "hello list!");
		// 获取列表指定下标的值
		System.out.println("修改列表中单个值  " + jedis.lindex("lists", 0));

		System.out.println("打印数组..." + jedis.lrange("lists", 0, 3));

		// 删除列表指定下标的值
		System.out.println("删除列表指定下标的值" + jedis.lrem("lists", 1, "vector"));

		System.out.println("打印数组..." + jedis.lrange("lists", 0, 3));
		// 删除区间以外的数据
		System.out.println("删除区间以外的数据" + jedis.ltrim("lists", 0, 1));

		System.out.println("打印数组..." + jedis.lrange("lists", 0, 3));

		// 列表出栈 ,移除 并返回 第一个值
		System.out.println("列表出栈   ,移除 并返回 第一个值   " + jedis.lpop("lists"));

		System.out.println("打印数组..." + jedis.lrange("lists", 0, 3));

		jedis.rpush("a", "1");
		jedis.lpush("a", "6");
		jedis.lpush("a", "3");
		jedis.lpush("a", "9");
		System.out.println(jedis.lrange("a", 0, -1));// [9, 3, 6, 1]    //翻转
		System.out.println(jedis.sort("a")); // [1, 3, 6, 9] //输入排序后结果  
		
	
	}

	
	//set集合
	@Test
	public void setTest() {
		Jedis jedis = RedisUtil.getJedis();
		System.out.println("======================set==========================");
		// 清空数据
		// System.out.println("清空库中所有数据："+jedis.flushDB());

		System.out.println("=============增=============");
		System.out.println("向sets集合中加入元素element001：" + jedis.sadd("sets", "element001"));
		System.out.println("向sets集合中加入元素element002：" + jedis.sadd("sets", "element002"));
		System.out.println("向sets集合中加入元素element003：" + jedis.sadd("sets", "element003"));
		System.out.println("向sets集合中加入元素element004：" + jedis.sadd("sets", "element004"));
		System.out.println("查看sets集合中的所有元素:" + jedis.smembers("sets"));
		System.out.println();

		System.out.println("=============删=============");
		System.out.println("集合sets中删除元素element003：" + jedis.srem("sets", "element003"));
		System.out.println("查看sets集合中的所有元素:" + jedis.smembers("sets"));
		/*
		 * System.out.println("sets集合中任意位置的元素出栈："+jedis.spop("sets"));//注：
		 * 出栈元素位置居然不定？--无实际意义
		 * System.out.println("查看sets集合中的所有元素:"+jedis.smembers("sets"));
		 */
		System.out.println();

		System.out.println("=============改=============");
		System.out.println("向sets集合中加入元素element004：" + jedis.sadd("sets", "element004"));
		System.out.println("查看sets集合中的所有元素:" + jedis.smembers("sets"));

		System.out.println("=============查=============");
		System.out.println("判断element001是否在集合sets中：" + jedis.sismember("sets", "element001"));
		System.out.println("循环查询获取sets中的每个元素：");
		Set<String> set = jedis.smembers("sets");
		Iterator<String> it = set.iterator();
		while (it.hasNext()) {
			Object obj = it.next();
			System.out.println(obj);
		}
		System.out.println();

		System.out.println("=============集合运算=============");
		System.out.println("sets1中添加元素element001：" + jedis.sadd("sets1", "element001"));
		System.out.println("sets1中添加元素element002：" + jedis.sadd("sets1", "element002"));
		System.out.println("sets1中添加元素element003：" + jedis.sadd("sets1", "element003"));
		System.out.println("sets2中添加元素element002：" + jedis.sadd("sets2", "element002"));
		System.out.println("sets2中添加元素element003：" + jedis.sadd("sets2", "element003"));
		System.out.println("sets2中添加元素element004：" + jedis.sadd("sets2", "element004"));
		System.out.println("查看sets1集合中的所有元素:" + jedis.smembers("sets1"));
		System.out.println("查看sets2集合中的所有元素:" + jedis.smembers("sets2"));
		System.out.println("sets1和sets2交集：" + jedis.sinter("sets1", "sets2"));
		System.out.println("sets1和sets2并集：" + jedis.sunion("sets1", "sets2"));
		System.out.println("sets1和sets2差集：" + jedis.sdiff("sets1", "sets2"));// 差集：set1中有，set2中没有的元素

	}

	
	
	
	
	public static void main(String[] args) throws Exception {
		JedisDemo jedisdemo = new JedisDemo();
		// jedis.testDeom();
		// jedis.testKey();
		jedisdemo.setTest();
	}

	@Test
	public void pingPong() {
		Jedis jedis = RedisUtil.getJedis();
		System.out.println(jedis.ping());

	}

	@Test
	public void cleanSet() {
		Jedis jedis = RedisUtil.getJedis();
		System.out.println("查看sets集合中的所有元素:" + jedis.smembers("sets").size());

		//删除数据库
		//jedis.flushDB();
		// System.out.println("查看sets集合中的所有元素:" + jedis.smembers("sets").size());

	}

	@Test
	public void cleanAll() {
		Jedis jedis = RedisUtil.getJedis();
		System.out.println(jedis.ping());
		jedis.flushAll();  //删除所有db的数据
		System.out.println(jedis.flushDB());
		jedis.flushDB();   //只删除当前db的数据
		System.out.println(jedis.flushDB());
	}

}